--- usr/bin/openmoko-panel-plugin	2008-08-24 17:13:20.000000000 +0200
+++ /usr/bin/openmoko-panel-plugin	2008-09-01 22:37:29.000000000 +0200
@@ -50,19 +50,28 @@
     # (de)activate hardware
     def activateHardware (self, widget, data=None):
         proxy = None
-        if (widget == self.gpsicon):
-            proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "GPS" )
-        if (widget == self.gsmicon):
-            proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "GSM" )
-        if (widget == self.wifiicon):
-            proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "WiFi" )
-        if (widget == self.bticon):
-            proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "Bluetooth" )
-        iface = Interface( proxy, "org.freesmartphone.Device.PowerControl" )
-        if ( iface.GetPower( ) == 1):
-            iface.SetPower(0);
+	if (widget == self.kbdicon):
+	    if self.kbdstate:
+		os.system("kill -s KILL `pidof /usr/bin/matchbox-keyboard`")
+	    else:
+		os.system("matchbox-keyboard &")
+	    self.kbdstate = not self.kbdstate
+	    self.update_status_icon();
+	    self.update_tooltip();
         else:
-            iface.SetPower(1);
+	    if (widget == self.gpsicon):
+                proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "GPS" )
+            if (widget == self.gsmicon):
+                proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "GSM" )
+            if (widget == self.wifiicon):
+                proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "WiFi" )
+            if (widget == self.bticon):
+                proxy = dbus_object.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + "Bluetooth" )
+            iface = Interface( proxy, "org.freesmartphone.Device.PowerControl" )
+            if ( iface.GetPower( ) == 1):
+                iface.SetPower(0);
+            else:
+                iface.SetPower(1);
 
 
     # Show_Hide callback
@@ -104,6 +113,7 @@
         self.gsmstate = 0;
         self.gpsstate = 0;
         self.btstate = 0;
+	self.kbdstate = 0;
         self.thread_terminate = False;
         self.dbus_objectInit();
         self.resources_proxy = {};
@@ -161,6 +171,13 @@
         self.batteryicon.connect("popup_menu", self.popup);
         self.batteryicon.set_visible(True);
 
+	self.kbdicon = gtk.StatusIcon();
+	self.kbdicon.set_from_file(self.get_icon("kbd"));
+	self.kbdicon.set_tooltip(self.get_tooltip("kbd"));
+	self.kbdicon.connect("activate", self.activateHardware);
+	self.kbdicon.connect("popup_menu", self.popup);
+	self.kbdicon.set_visible(True);
+
     # set correct image for icon
     def update_status_icon( self ):
         self.wifiicon.set_from_file(self.get_icon("wifi"));
@@ -168,6 +185,7 @@
         self.gsmicon.set_from_file(self.get_icon("gsm"));
         self.bticon.set_from_file(self.get_icon("bluetooth"));
         self.batteryicon.set_from_file(self.get_icon("battery"));
+	self.kbdicon.set_from_file(self.get_icon("kbd"));
 
     # set tool tips
     def update_tooltip( self ):
@@ -176,6 +194,7 @@
         self.gsmicon.set_tooltip(self.get_tooltip("gsm"));
         self.bticon.set_tooltip(self.get_tooltip("bluetooth"));
         self.batteryicon.set_tooltip(self.get_tooltip("battery"));
+	self.kbdicon.set_tooltip(self.get_tooltip("kbd"));
 
     # dbus init
     def dbus_objectInit( self ):
@@ -214,7 +233,7 @@
         
             self.update_status_icon();
             self.update_tooltip();
-            time.sleep(15);
+            time.sleep(30);
 
     # starting the thread
     def set_timed_status_update( self ):
@@ -223,6 +242,8 @@
 
     # selecting the right icon
     def get_icon( self, type):
+	if (type == "kbd"):
+	    return "%s/matchbox-keyboard_%d.png" % (icondir,self.kbdstate);
         if (type == "gsm"):
             return "%s/gsm_%d.png" % (icondir,self.gsmstate);
         if (type == "bluetooth"):
@@ -264,16 +285,18 @@
     # creating tooltip string
     def get_tooltip( self, type ):
         tooltip = "foobar"
+	if (type == "kbd"):
+	    tooltip = "Keyboard is %s" % self.kbdstate;
         if (type == "battery"):
             tooltip = "Battery at %s%%" % self.batcharge;
         if (type == "gsm"):
-            tooltip = "GSM State is %d" % self.gsmstate;
+            tooltip = "GSM State is %s" % self.gsmstate;
         if (type == "bluetooth"):
-            tooltip = "Bluetooth State is %d" % self.btstate;
+            tooltip = "Bluetooth State is %s" % self.btstate;
         if (type == "gps"):
-            tooltip = "GPS State is %d" % self.gpsstate;
+            tooltip = "GPS State is %s" % self.gpsstate;
         if (type == "wifi"):
-            tooltip = "Wifi State is %d" % self.wifistate;
+            tooltip = "Wifi State is %s" % self.wifistate;
         return tooltip;
 
 #----------------------------------------------------------------------------#
